查看原文
其他

pandas绘图详细教程

草yang年华 机器学习与python集中营 2021-09-10


进入正文


一、pandas绘图简介


pandas绘图简介pandas绘图简介

1.1


   

前面讲过matplotlib的相关教程,matplotlib虽然功能强大,但是matplotlib相对而言较为底层,画图时步骤较为繁琐,比较麻烦,因为要画一张完整的图表,需要实现很多的基本组件,比如图像类型、刻度、标题、图例、注解等等。目前有很多的开源框架所实现的绘图功能是基于matplotlib的,pandas便是其中之一,对于pandas数据,直接使用pandas本身实现的绘图方法比matplotlib更加方便简单。

Next



二、pandas绘图接口


   

pandas的两类基本数据结构series和dataframe都提供了一个统一的接口plot(),该函数的定义如下所示:我们经常看见这样的操作方式,比如 df.plot()或者是series.plot()当我们查看该函数的定义的时候却查不到,这是为什么呢?plot的本质又是什么呢?


pandas绘图接口Series对象接口

2.1


   

plot=CachedAccessor("plot",gfx.SeriesPlotMethods)


plot本质上是一个SeriesPlotMethods类型的一个对象,而为什么可以直接调用plot()呢,是因为SeriesPlotMethods类实现了对象调用的方法__call__(),查看定义可得:


class SeriesPlotMethods(BasePlotMethods):

    """Series plotting accessor and method



    Examples

    --------

    >>> s.plot.line()

    >>> s.plot.bar()

    >>> s.plot.hist()



    Plotting methods can also be accessed by calling the accessor as a method

    with the ``kind`` argument:

    ``s.plot(kind='line')`` is equivalent to ``s.plot.line()``

    """




    def __call__(self, kind='line', ax=None,

                 figsize=None, use_index=True, title=None, grid=None,

                 legend=False, style=None, logx=False, logy=False,

                 loglog=False, xticks=None, yticks=None,

                 xlim=None, ylim=None,

                 rot=None, fontsize=None, colormap=None, table=False,

                 yerr=None, xerr=None,

                 label=None, secondary_y=False, **kwds):


        return plot_series(self._data, kind=kind, ax=ax, figsize=figsize,

                           use_index=use_index, title=title, grid=grid,

                           legend=legend, style=style, logx=logx, logy=logy,

                           loglog=loglog, xticks=xticks, yticks=yticks,

                           xlim=xlim, ylim=ylim, rot=rot, fontsize=fontsize,

                           colormap=colormap, table=table, yerr=yerr,

                           xerr=xerr, label=label, secondary_y=secondary_y,

                           **kwds)

           --------


   

kind:画图的种类,可以是 line(默认),


‘bar’ or ‘barh’ for bar plots,bar表示垂直柱状图,barh表示水平柱状图

‘hist’ for histogram

‘box’ for boxplot

‘kde’ or ‘density’ for density plots。即Kernel Density Estimate 和密度估计,常常与hist一起混合使用。

‘area’ for area plots

‘scatter’ for scatter plots

‘hexbin’ for hexagonal bin plots

‘pie’ for pie plots


ax:要在其上进行绘制的matplotlib.subplot对象,如果没有,则使用默认的subplot对象。 

figsize:图像尺寸


use_index:True(默认),False。表示默认情况下,会将series和dataframe的index传给matplotlib,用已绘制X轴。


title:标题


grid:网格


legend:图例


style,绘图的风格,如‘ko--’


logx:在X轴上使用对数标尺


logy: 在Y轴上使用对数标尺


loglog:


xticks=None,用做x刻度的值


yticks=None,用做Y轴刻度的值

xlim=None, X轴的界限如【0,10】


ylim=None,Y轴的界限

rot=None,  旋转刻度标签 0-360


fontsize=None,


colormap=None,


table=False,        


yerr=None, 


xerr=None,


label=None,


secondary_y=False, **kwds):


---------------------------------------------------------------------------------------------------------------------


下面几个是DataFrame特有的


sharex: 共用X轴


sharey:

--------------------- 

本节总结

总结:上面只是一些基本的图像参数设置,再具体绘制每一种图形的时候,还有具体对应的相关设置,这里就不一一列举了,在实际的图像中遇到了在进行讲解。

pandas绘图接口DataFrame对象接口

2.2




   

plot = CachedAccessor("plot", gfx.FramePlotMethods)

plot本质上是一个FramePlotMethods类型的一个对象,而为什么可以直接调用plot()呢,是因为FramePlotMethods类实现了对象调用的方法__call__(),相关的定义和函数接口和上面的SeriesPlotMethods类型的定义大致差不多,这里就不在叙述了。

本节总结


总结:通过上面的原理解释,现在明白了为什么


s.plot(kind='line') 和s.plot.line()这两者是等价的了,因为,前者的plot()是作为对象调用的,本质上plot是一个对象,而line、bar等则是类所实现的方法,当然能够通过plot对象去调用了。


总结:除了上面一些常见的基本图形以外,dataframe还可以绘制如下一些图形

Scatter Matrix

Andrews Curves

Parallel Coordinates

Lag Plot

Autocorrelation Plot

Bootstrap Plot

RadViz

具体每一种的含义这里先不讨论。


Next



三、pandas绘图实例


pandas绘图实例绘图实例

3.1


3.1.1 bar条形图

bar()函数有一个重要的参数,stacked,默认为false,表示不堆积,设置为true则表示为堆积。


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


df2 = pd.DataFrame(np.random.rand(104), columns=['a''b''c''d'])
df2.plot.bar()

plt.show()


3.1.2 histogram

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df4 = pd.DataFrame({'a': np.random.randn(1000) + 1'b': np.random.randn(1000),'c': np.random.randn(1000) - 1}, columns=['a''b''c'])
df4.plot.hist(alpha=0.5)

plt.show()



3.1.3 box绘图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt 

df = pd.DataFrame(np.random.rand(105), columns=['A''B''C''D''E'])
df.plot.box()

plt.show()




3.1.4 area绘图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.rand(104), columns=['a''b''c''d'])
df.plot.area() 

plt.show()



3.1.5 Hexagonal Bin绘图

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randn(10002), columns=['a''b'])
df['b'] = df['b'] + np.arange(1000)
df.plot.hexbin(x='a', y='b', gridsize=25)

plt.show()




本节总结

熟练使用pandas绘图在使用pandas进行数据分析的时候非常方便。Next


pandas绘图实例不足和疑惑

3.2


    

上面每一种绘图方法对应有一系列的参数设置,但是通过转到定义,并不能查看到究竟有哪一些参数可以设置,只得到下面这一句话:


def bar(self, **kwds):


"""


Vertical bar plot


Parameters


----------


`**kwds` : optional


Additional keyword arguments are documented in


:meth:`pandas.Series.plot`.


故而详细的参数列表究竟在哪里我还没找到,如果哪位大神世道在哪里查看每一种绘图函数的详细参数列表,望告知!

--------------------- 



全文总结

pandas绘图功能是对matplotlib绘图的高层封装,提供了更加简单易用的绘图接口,在使用pandas进行数据分析的时候,如除了使用pandas本身自带的一些数据可视化以外,如果将pandas和matplotlib结合起来使用,将会起到更好的效果

END



往期回顾


matplotlib高级绘图——路径和形状

numpy高级特性——掩码数组

RNN最接地气的理解以及实现——sin正弦序列

看完还不懂卷积神经网络“感受野”?那你来找我























: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存